Exit early if size zero for cache helpers
authorSoby Mathew <[email protected]>
Thu, 15 Jun 2017 15:18:45 +0000 (16:18 +0100)
committerSoby Mathew <[email protected]>
Wed, 21 Jun 2017 16:46:28 +0000 (17:46 +0100)
This patch enables cache helper functions `flush_dcache_range`,
`clean_dcache_range` and `invalidate_dcache_range` to exit early
if the size argument specified is zero

Change-Id: I0b63e8f4bd3d47ec08bf2a0b0b9a7ff8a269a9b0
Signed-off-by: Soby Mathew <[email protected]>
lib/aarch32/cache_helpers.S
lib/aarch64/cache_helpers.S

index 57b6b384ed55b18f7cc997705cad2601e022b78a..810af0f0db45b576af978c575d9372e8973c995b 100644 (file)
@@ -20,6 +20,9 @@
  * This macro can be used for implementing various data cache operations `op`
  */
 .macro do_dcache_maintenance_by_mva op, coproc, opc1, CRn, CRm, opc2
+       /* Exit early if size is zero */
+       cmp     r1, #0
+       beq     exit_loop_\op
        dcache_line_size r2, r3
        add     r1, r0, r1
        sub     r3, r2, #1
@@ -30,6 +33,7 @@ loop_\op:
        cmp     r0, r1
        blo     loop_\op
        dsb     sy
+exit_loop_\op:
        bx      lr
 .endm
 
index eef07a8be501892dad35d09e16c7a9a6b36274a9..9c40b9db869779243d20dccb813d630f7c7d716c 100644 (file)
@@ -20,6 +20,8 @@
  * This macro can be used for implementing various data cache operations `op`
  */
 .macro do_dcache_maintenance_by_mva op
+       /* Exit early if size is zero */
+       cbz     x1, exit_loop_\op
        dcache_line_size x2, x3
        add     x1, x0, x1
        sub     x3, x2, #1
@@ -30,6 +32,7 @@ loop_\op:
        cmp     x0, x1
        b.lo    loop_\op
        dsb     sy
+exit_loop_\op:
        ret
 .endm
        /* ------------------------------------------